package com.jacars.biz.user.service;

import com.jacars.biz.user.dao.model.JsptUserExcel;
import com.jacars.common.api.PageResult;
import com.jacars.common.api.Result;
import com.jacars.common.model.*;
import com.jacars.db.support.Query;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * @author zlt
 * <p>
 * Blog: https://zlt2000.gitee.io
 * Github: https://github.com/zlt2000
 */
public interface UserService {

    /**
     * 获取UserDetails对象
     *
     * @param username
     * @return
     */
    LoginAppUser findByUsername(String username);

    LoginAppUser findByUserId(String username);

    LoginAppUser findByOpenId(String username);

    LoginAppUser findByMobile(String username);

    /**
     * 通过JsptUser 转换为 LoginAppUser，把roles和permissions也查询出来
     *
     * @param jsptUser
     * @return
     */
    LoginAppUser getLoginAppUser(JsptUser jsptUser);

    JsptUser selectByUserId(String userId);
    /**
     * 根据用户名查询用户
     *
     * @param username
     * @return
     */
    JsptUser selectByUsername(String username);

    /**
     * 根据手机号查询用户
     *
     * @param mobile
     * @return
     */
    JsptUser selectByMobile(String mobile);

    /**
     * 根据openId查询用户
     *
     * @param openId
     * @return
     */
    JsptUser selectByOpenId(String openId);

    /**
     * 用户分配角色
     *
     * @param id
     * @param roleIds
     */
    void setRoleToUser(Long id, Set<Long> roleIds);

    /**
     * 更新密码
     *
     * @param id
     * @param oldPassword
     * @param newPassword
     * @return
     */
    Result updatePassword(Long id, String oldPassword, String newPassword);

    /**
     * 用户列表
     *
     * @param params
     * @return
     */
    PageResult<JsptUser> findUsers(Map<String, Object> params, Query query);


    /**
     * 用户角色列表
     *
     * @param userId
     * @return
     */
    List<JsptRole> findRolesByUserId(Long userId);

    /**
     * 状态变更
     *
     * @param params
     * @return
     */
    Result updateEnabled(Map<String, Object> params);

    /**
     * 查询全部用户
     *
     * @param params
     * @return
     */
    List<JsptUserExcel> findAllUsers(Map<String, Object> params);

    Result saveOrUpdateUser(JsptUser jsptUser) throws Exception;

    /**
     * 删除用户
     */
    boolean delUser(Long id);

    JsptUser findUserById(long id);

    void updateSysUser(JsptUser jsptUser);

    void saveBatch(List<JsptUser> users);

}
